Unidad 6.2 - DTD y XSL

DTD y XSL permiten validar, transformar y representar documentos XML. En esta unidad se estudian estructuras DTD, transformaciones XSLT, XPath y generación dinámica de HTML a partir de XML.

6.12 DTD (Document Type Definition)

DTD

DTD define las reglas que debe cumplir un documento XML. Permite validar estructura, orden y contenido.

¿Para qué sirve?

  • Validar XML.
  • Definir elementos permitidos.
  • Definir atributos.
  • Controlar estructura.

Ejemplo básico

<!ELEMENT persona (nombre,edad)> <!ELEMENT nombre (#PCDATA)> <!ELEMENT edad (#PCDATA)>
DTD funciona como un conjunto de reglas para XML.

Mini-test

1. ¿Qué significa DTD?

6.13 DTD - Ejemplos XML-DTD

XML DTD

DTD valida la estructura definida dentro de un XML.

Documento XML

<persona> <nombre>Ana</nombre> <edad>32</edad> </persona>

DTD asociado

<!ELEMENT persona (nombre,edad)> <!ELEMENT nombre (#PCDATA)> <!ELEMENT edad (#PCDATA)>
El orden indicado en DTD es obligatorio.

Mini-test

1. ¿Qué significa #PCDATA?

6.14 DTD - Tipos de DTD

interno externo

Existen dos tipos principales de DTD.

DTD interno

<!DOCTYPE persona [ <!ELEMENT persona (nombre)> <!ELEMENT nombre (#PCDATA)> ]>

DTD externo

<!DOCTYPE persona SYSTEM "persona.dtd">

Diferencias

Tipo Características
Interno Dentro del XML
Externo Archivo .dtd separado
Los DTD externos permiten reutilizar reglas.

Mini-test

1. ¿Dónde se guarda un DTD externo?

6.15 DTD - Cuantificadores DTD

? * +

Los cuantificadores indican cuántas veces puede repetirse un elemento.

Símbolo Significado
? 0 o 1 vez
* 0 o muchas
+ 1 o muchas

Ejemplo

<!ELEMENT alumnos (alumno+)>
+ obliga a que exista al menos un elemento.

Mini-test

1. ¿Qué símbolo indica “1 o muchas”?

6.16 DTD con atributos

ATTLIST

Los atributos en DTD se definen mediante ATTLIST.

<!ELEMENT alumno (nombre,edad)> <!ATTLIST alumno id ID #REQUIRED>

Palabras importantes

  • ID → identificador único.
  • #REQUIRED → obligatorio.
  • #IMPLIED → opcional.
Los atributos pueden validarse igual que elementos.

Mini-test

1. ¿Qué significa #REQUIRED?

6.17 ¿Qué es XSL?

XSL

XSL es un conjunto de tecnologías para transformar y representar XML.

Componentes

  • XSLT → transforma XML.
  • XPath → selecciona nodos.
  • XSL-FO → formato impresión/PDF.
<?xml-stylesheet type="text/xsl" href="estilos.xsl"?>
XSL no es lo mismo que XSLT.

Mini-test

1. ¿Qué componente transforma XML?

6.18 XSLT

XSLT

XSLT transforma documentos XML en otros formatos.

Transformaciones posibles

  • HTML
  • Otro XML
  • Texto plano
  • JSON
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
XSLT trabaja mediante plantillas.

Mini-test

1. ¿Qué hace XSLT?

6.19 Plantillas (xsl:template)

template

Las plantillas indican qué hacer cuando se encuentra un nodo XML.

<xsl:template match="/"> <h1>Hola</h1> </xsl:template>

match="/"

Selecciona la raíz del documento XML.

Toda transformación suele comenzar desde la raíz.

Mini-test

1. ¿Qué hace xsl:template?

6.20 XPath: cómo seleccionamos datos

XPath

XPath permite navegar por documentos XML.

Expresión Función
/ Raíz
. Nodo actual
.. Nodo padre
@ Atributos
<xsl:value-of select="persona/nombre"/>
XPath funciona como rutas dentro del XML.

Mini-test

1. ¿Qué símbolo selecciona atributos?

6.21 Ejemplo XPath y uso

select

XPath puede filtrar y buscar nodos específicos.

/tienda/producto /tienda/producto[1] /tienda/producto[@categoria='hogar']

Explicaciones

  • [1] selecciona el primero.
  • @categoria selecciona atributo.
  • // busca en cualquier parte.
XPath es fundamental en XSLT.

Mini-test

1. ¿Qué hace //producto?

6.22 Bucles: xsl:for-each

for-each

Permite recorrer listas de elementos XML.

<xsl:for-each select="alumnos/alumno"> <p> <xsl:value-of select="."/> </p> </xsl:for-each>
Cada nodo seleccionado genera salida HTML.

Mini-test

1. ¿Qué hace xsl:for-each?

6.23 XSLT: estructura básica

stylesheet
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> </xsl:template> </xsl:stylesheet>

Partes importantes

  • xsl:stylesheet → raíz XSLT.
  • xsl:template → plantilla.
  • match → nodo seleccionado.

Mini-test

1. ¿Cuál es el elemento raíz XSLT?

6.24 xsl:value-of y @

value-of

xsl:value-of extrae contenido de nodos.

<xsl:value-of select="autor"/>

Seleccionar atributos

<xsl:value-of select="@año"/>
@ permite acceder directamente a atributos XML.

Mini-test

1. ¿Qué hace xsl:value-of?

6.25 HTML + XSLT

HTML

XSLT puede generar páginas HTML dinámicas desde XML.

<xsl:template match="libro"> <html> <body> <h1> <xsl:value-of select="titulo"/> </h1> </body> </html> </xsl:template>
XSLT puede construir HTML completo dinámicamente.

Mini-test

1. ¿Puede XSLT generar HTML?

6.26 xsl:apply-templates y xsl:attribute

apply-templates

apply-templates aplica reglas automáticamente a subelementos.

<xsl:apply-templates/>

xsl:attribute

<xsl:attribute name="src"> <xsl:value-of select="imagen"/> </xsl:attribute>

Ejemplo completo

<img> <xsl:attribute name="src"> foto.jpg </xsl:attribute> </img>
xsl:attribute genera atributos dinámicos.

Mini-test

1. ¿Qué hace xsl:apply-templates?

6.27 Resumen y aspectos extra

Resumen
Elemento Función
xsl:template Define transformaciones
xsl:value-of Extrae valores
xsl:for-each Recorre nodos
XPath Selecciona elementos
xsl:attribute Crea atributos dinámicos

Aspectos importantes

  • XML fue muy usado en APIs antiguas.
  • JSON ha reemplazado parte de XML.
  • XSLT sigue siendo útil en sistemas empresariales.
  • Android aún usa XML ampliamente.
XPath y XSLT son preguntas frecuentes de examen.

Mini-test

1. ¿Qué tecnología selecciona nodos XML?